Skip to content

Fix PHP 8.4 external extension ABI - #2476

Open
chubes4 wants to merge 3 commits into
mainfrom
fix/2474-playground-extension-abi
Open

Fix PHP 8.4 external extension ABI#2476
chubes4 wants to merge 3 commits into
mainfrom
fix/2474-playground-extension-abi

Conversation

@chubes4

@chubes4 chubes4 commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Closes #2474.

Summary

Why both overlays are carried

Both upstream fixes are required, and neither is available in a released package:

Upstream Provides Status
WordPress/wordpress-playground#4108 external extension ABI merged 2026-08-31, unreleased — 3.1.52 was published ~7h earlier
WordPress/wordpress-playground#4170 mysqli_poll timeout fix open

A carried overlay must be paired with the driver it runs under. Bumping the driver to 3.1.52 while leaving the PHP 8.3 overlay built against 3.1.46 produced a version skew that hung inside zif_mysqli_poll until the recipe timed out. The 8.3 overlay is therefore rebuilt from #4170 against 3.1.52, for both asyncify and jspi, so whichever mode the runtime selects carries the fix.

Both overlays record their upstream revision, source package, and tree digest in runtime-overlays/, and both become deletable as soon as their upstream change ships.

Verified

  • tests/mysqli-poll.integration.test.ts passes against the rebuilt 8.3 overlay (PHP 8.3.33, MariaDB)
  • npm run test:php-wasm-external-extension-abi
  • npm run test:php-wasm-runtime-rejection-any-command
  • npm run test:phpunit-runtime-rejection
  • npm run test:release-package-coverage
  • npm run build, npx patch-package --check, git diff --check

A PHP 8.4 JSPI extension workload that previously failed at startup with an unnamed TypeError: resolved is not a function now boots PHP 8.4.25, loads its extension, and reaches command dispatch.

Known limitation

The jspi runtime is carried and rebuilt but not directly exercised: JSPI feature detection reports unavailable on the Node versions used here, so asyncify is the mode under test. Carrying both avoids a silent hang if selection changes.

AI assistance

OpenAI GPT-5.6 Sol via OpenCode traced the PHP.wasm ABI mismatch, diagnosed the driver/overlay version skew behind the mysqli_poll timeout, rebuilt both PHP 8.3 runtimes from the upstream fix, assembled the provenance-bound overlays, and implemented the packaging and regression coverage. Reviewed by Chris Huber.

@chubes4
chubes4 marked this pull request as ready for review September 4, 2026 12:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upgrade Playground runtime for complete external-extension ABI

1 participant